refactor Target serialization
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 16 Dec 2015 21:10:58 +0000 (00:10 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 16 Dec 2015 21:10:58 +0000 (00:10 +0300)
Remove obscure `metadata` field and implement proper Encodable for
TargetKind becase default one is not used.

src/cargo/core/manifest.rs
tests/test_cargo_read_manifest.rs

index 28a494eb957b9952444d4111f20e3bbe00add105..9e2b3567b989cdc04eb445f40d59c5abed3e4da0 100644 (file)
@@ -93,7 +93,7 @@ impl LibKind {
     }
 }
 
-#[derive(Debug, Clone, Hash, PartialEq, RustcEncodable, Eq)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq)]
 pub enum TargetKind {
     Lib(Vec<LibKind>),
     Bin,
@@ -103,6 +103,21 @@ pub enum TargetKind {
     CustomBuild,
 }
 
+impl Encodable for TargetKind {
+    fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
+        match *self {
+            TargetKind::Lib(ref kinds) => {
+                kinds.iter().map(|k| k.crate_type()).collect()
+            }
+            TargetKind::Bin => vec!["bin"],
+            TargetKind::Example => vec!["example"],
+            TargetKind::Test => vec!["test"],
+            TargetKind::CustomBuild => vec!["custom-build"],
+            TargetKind::Bench => vec!["bench"],
+        }.encode(s)
+    }
+}
+
 #[derive(RustcEncodable, RustcDecodable, Clone, PartialEq, Eq, Debug, Hash)]
 pub struct Profile {
     pub opt_level: u32,
@@ -145,31 +160,18 @@ pub struct Target {
 }
 
 #[derive(RustcEncodable)]
-pub struct SerializedTarget {
-    kind: Vec<&'static str>,
-    name: String,
-    src_path: String,
-    metadata: Option<Metadata>
+struct SerializedTarget<'a> {
+    kind: &'a TargetKind,
+    name: &'a str,
+    src_path: &'a str,
 }
 
 impl Encodable for Target {
     fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
-        let kind = match self.kind {
-            TargetKind::Lib(ref kinds) => {
-                kinds.iter().map(|k| k.crate_type()).collect()
-            }
-            TargetKind::Bin => vec!["bin"],
-            TargetKind::Example => vec!["example"],
-            TargetKind::Test => vec!["test"],
-            TargetKind::CustomBuild => vec!["custom-build"],
-            TargetKind::Bench => vec!["bench"],
-        };
-
         SerializedTarget {
-            kind: kind,
-            name: self.name.clone(),
-            src_path: self.src_path.display().to_string(),
-            metadata: self.metadata.clone()
+            kind: &self.kind,
+            name: &self.name,
+            src_path: &self.src_path.display().to_string(),
         }.encode(s)
     }
 }
index 52f79ccb97839479fd52a32adc5e290507a92c56..68ecabac6893549a81ddc875cbda789ae937564c 100644 (file)
@@ -12,8 +12,7 @@ fn read_manifest_output() -> String {
     \"targets\":[{\
         \"kind\":[\"bin\"],\
         \"name\":\"foo\",\
-        \"src_path\":\"src[..]foo.rs\",\
-        \"metadata\":null\
+        \"src_path\":\"src[..]foo.rs\"\
     }],\
     \"manifest_path\":\"[..]Cargo.toml\"\
 }".into()